package main

import "fmt"

type USB interface { //定义一个接口

	input()
	output()
}
type Mouse struct {
	//接口的实现类   只要这个类将接口中的所有方法都实现就叫接口的实现类
	name string
}

func (mouse Mouse) input() { //用类实现接口的中函数（称为方法）
	fmt.Println(mouse.name + "鼠标输入")
}
func (mouse Mouse) output() {
	fmt.Println(mouse.name + "鼠标输出")
}

// test函数传入的参数是一个接口（这个可以用来干嘛）
func test(u USB) {
	u.input()
	u.output()
}

func main() {
	//通过传入接口的实现类，来进行具体方法的调用
	m := Mouse{"逻辑"}
	test(m) //需要结构体完整的实现接口，才可以进行（传入对象的）方法的调用

	//定义接口 将实现类赋值给接口
	var usb USB
	//接口对象可以接受实现类的赋值，但是不能访问实现类中的属性！！！
	usb = m
	//usb 不能用mouse的字段
	//fmt.Println(usb.name)
	fmt.Println(usb)

}
